package cn.youqu.happy.module.youqu.service.userFollows;

import cn.youqu.happy.framework.common.pojo.PageResult;
import cn.youqu.happy.module.youqu.controller.admin.userFollows.vo.UserFollowsCreateReqVO;
import cn.youqu.happy.module.youqu.controller.admin.userFollows.vo.UserFollowsExportReqVO;
import cn.youqu.happy.module.youqu.controller.admin.userFollows.vo.UserFollowsPageReqVO;
import cn.youqu.happy.module.youqu.controller.admin.userFollows.vo.UserFollowsUpdateReqVO;
import cn.youqu.happy.module.youqu.controller.app.userFollows.vo.AppUserFollowsFollowReqVO;
import cn.youqu.happy.module.youqu.controller.app.userFollows.vo.AppUserFollowsPageReqVO;
import cn.youqu.happy.module.youqu.controller.app.userFollows.vo.AppUserFollowsUpdateReqVO;
import cn.youqu.happy.module.youqu.dal.dataobject.userFollows.UserFollowsDO;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * 用户关注 Service 接口
 * 用户关注系统活动
 *
 * @author 王其岩  20112001045
 */
public interface UserFollowsService {

    /**
     * 创建用户关注
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Integer createUserFollows(@Valid UserFollowsCreateReqVO createReqVO);

    /**
     * 更新用户关注
     *
     * @param updateReqVO 更新信息
     */
    void updateUserFollows(@Valid UserFollowsUpdateReqVO updateReqVO);

    /**
     * 删除用户关注
     *
     * @param id 编号
     */
    void deleteUserFollows(Integer id);

    /**
     * 获得用户关注
     *
     * @param id 编号
     * @return 用户关注
     */
    UserFollowsDO getUserFollows(Integer id);

    /**
     * 获得用户关注列表
     *
     * @param ids 编号
     * @return 用户关注列表
     */
    List<UserFollowsDO> getUserFollowsList(Collection<Integer> ids);

    /**
     * 获得用户关注分页
     *
     * @param pageReqVO 分页查询
     * @return 用户关注分页
     */
    PageResult<UserFollowsDO> getUserFollowsPage(UserFollowsPageReqVO pageReqVO);

    /**
     * 获得用户关注列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 用户关注列表
     */
    List<UserFollowsDO> getUserFollowsList(UserFollowsExportReqVO exportReqVO);

    PageResult<UserFollowsDO> getUserFollowsPage(UserFollowsPageReqVO pageVO, Long loginUserId);

    List<UserFollowsDO> getUserFollowsList(Collection<Integer> ids, Long loginUserId);

    UserFollowsDO getUserFollows(Integer id, Long loginUserId);

    void deleteUserFollows(Integer id, Long loginUserId);

    Integer followerFollows(AppUserFollowsFollowReqVO followReqVO, Long loginUserId);

    void updateUserFollows(AppUserFollowsUpdateReqVO updateReqVO, Long loginUserId);
}
